/**
 * 一作业回顾
 *   优化原本的作业 handle(num1,num2,"函数名") 这个函数名不大好记因在其它模块
 *   一.json的key值 (+-* /)
 *   二.module.exports.(函数名)
 */

/**
 * 二.buffer 英文名(缓存)
 *   互联上有哪些文件格式？1.文本2.图片 3.视频 4.excell 5.音频 6.word...因为呢 js中的字符串不满完满足这些文件的需求
 *   ---》buffer
 *   buffer 存储二进制文件的对象，其实buffer 跟我们的数组数据结构是相似
 *   buffer 的性能彪悍(底层是c++)
 *   buffer 存储的基本单元二进制的数据,计算机显示是以16显示
 *   编译语言是先编译成可以执行的二进制文件，脚本是运行时编译
 *   bit  8bit = 1byte
 *        1024byte = 1kb
 *        1024kb = 1mb
 *        1024mb = 1gb
 *        1024gb = 1tb
 *        
 */

/**
 * 三 buffer的具体实践
 *    buffer 是存在全局对象中，所以无需 require引入
 */
// 三.一 Buffer 和字符串之间进行转换时
// uft8 是兼容 accii (我学node 我们 是汉字 一个汉字是占用三个字节，node 是英文)
let str ='我sduty node at 2020.2.24';

let bf = Buffer.from(str,'utf8');
console.log(bf);
console.log(bf.length); //字节数 '我'的字节数 3  
console.log(str.length);//字符数 '我'一个字符 

// 三.二 创建一个buffer buffer对象在内存中创建的是一个连续的内存块，且不支持扩充  0000000--11111111
         //buffer对象的下标从0开始
         //buffer 的元素的赋值如超过了255的话，会做截断


let bf2 = Buffer.alloc(10);
bf2[0]=200;
bf2[1]=300;// 300的二进制 100101100
                        //00101100  
console.log(bf2);

// 四.应用场景-------todo 

//性能对比

console.log(Math.round(Math.random()*255));

let nums=50000000;
let bf3 = Buffer.alloc(nums);
let startAt = Date.now();
for(let i=0;i<nums;i++){
    bf3[i]=Math.round(Math.random()*255);
}
let endAt =Date.now();
console.log("buffer的1000万次存入用时:"+(endAt-startAt));
let startAt2 =Date.now();
let arr =[];
for(let j=0;j<nums;j++){
    arr[j]=Math.round(Math.random()*255);
}
let endAt2 =Date.now();

console.log("数组的1000万次的存入耗时:"+(endAt2-startAt2));









  

